/*
 * Cette liste contient les movements interdits
 * quand on passe d'un voisinage vers un autre
 */

package Modele;

import java.util.ArrayList;

/**
 *
 * @author Administrator
 */
public class ListeInterdite {
        private int DureeDInterdiction;

	//liste des noeuds interdits
	private ArrayList<Integer> AjouterInterdit;
	private ArrayList<Integer> SupprimerInterdit;

	//le nombre d'iterations interdits des noeuds
	private int[] dureeInterditeAjouter;
	private int[] dureeInterditeSupprimer;

	public ListeInterdite(int tailleGraphe) {
            
            DureeDInterdiction = tailleGraphe/10;
            AjouterInterdit = new ArrayList <Integer> ();
            SupprimerInterdit = new ArrayList <Integer> ();
            dureeInterditeAjouter=new int[tailleGraphe];
            dureeInterditeSupprimer=new int[tailleGraphe];
	}


	public void interdireAjouter(int sommet) {
                AjouterInterdit.add(sommet);
		dureeInterditeAjouter[sommet] = DureeDInterdiction;
	}

	public void interdireSupprimer(int sommet) {
                SupprimerInterdit.add(sommet);
		dureeInterditeSupprimer[sommet] = DureeDInterdiction;
	}

	public void permettreAjouter(int sommet) {
		AjouterInterdit.remove(sommet);
	}

	public void permettreSupprimer(int sommet) {
		SupprimerInterdit.remove(sommet);
	}

	public void miseAJour() {
		int i;
		for (i=0;i<AjouterInterdit.size();i++) {
		
			int sommet = AjouterInterdit.get(i);
			dureeInterditeAjouter[sommet]--;

			if ( dureeInterditeAjouter[sommet]==0) {
				permettreAjouter(sommet);
				i--;
			}
		}

		for (i=0;i<SupprimerInterdit.size();i++) {
			int sommet = SupprimerInterdit.get(i);
			dureeInterditeSupprimer[sommet]--;

			if ( dureeInterditeSupprimer[sommet]==0) {
				permettreSupprimer(sommet);
				i--;
			}
		}
	}

    public boolean estDansListeNonAjouter(int sommet){

        return AjouterInterdit.contains(sommet);
    }
    
    public boolean estDansListeNonSupprimer(int sommet){

        return SupprimerInterdit.contains(sommet);
    }
}
